import { useMemo } from 'react';
import { useAuthStore } from '~/stores/auth.store';

/**
 * 权限 Hook
 * 用于检查当前用户是否拥有指定权限
 */
export function usePermission() {
  const permissions = useAuthStore((state) => state.permissions);

  // 检查是否为超级管理员（权限列表包含 '*'）
  const isSuperAdmin = useMemo(() => {
    return permissions.includes('*');
  }, [permissions]);

  /**
   * 检查是否拥有指定权限
   * @param permission 权限标识，如 'system:user:create'
   * @returns 是否拥有权限
   */
  const hasPermission = useMemo(() => {
    return (permission: string): boolean => {
      if (!permission) return true;
      
      // 超级管理员拥有所有权限
      if (isSuperAdmin) return true;
      
      // 检查是否拥有指定权限
      return permissions.includes(permission);
    };
  }, [permissions, isSuperAdmin]);

  /**
   * 检查是否拥有任意一个权限
   * @param permissionList 权限标识数组
   * @returns 是否拥有任意一个权限
   */
  const hasAnyPermission = useMemo(() => {
    return (permissionList: string[]): boolean => {
      if (!permissionList || permissionList.length === 0) return true;
      
      // 超级管理员拥有所有权限
      if (isSuperAdmin) return true;
      
      // 检查是否拥有任意一个权限
      return permissionList.some((permission) => permissions.includes(permission));
    };
  }, [permissions, isSuperAdmin]);

  /**
   * 检查是否拥有所有权限
   * @param permissionList 权限标识数组
   * @returns 是否拥有所有权限
   */
  const hasAllPermissions = useMemo(() => {
    return (permissionList: string[]): boolean => {
      if (!permissionList || permissionList.length === 0) return true;
      
      // 超级管理员拥有所有权限
      if (isSuperAdmin) return true;
      
      // 检查是否拥有所有权限
      return permissionList.every((permission) => permissions.includes(permission));
    };
  }, [permissions, isSuperAdmin]);

  return {
    hasPermission,
    hasAnyPermission,
    hasAllPermissions,
    isSuperAdmin,
  };
}

